package com.lej.upgrade

import android.content.Context
import com.arialyy.annotations.Download
import com.arialyy.aria.core.Aria
import com.arialyy.aria.core.task.DownloadTask

object DownloadHelper {
    const val DOWNLOAD_LOADING = 1
    const val DOWNLOAD_SUC = 2
    const val DOWNLOAD_FAIL = 3

    private val listeners: HashMap<String, (Int, Int) -> Unit> = HashMap()

    fun init(context: Context) {
        Aria.init(context)
    }

    fun start(url: String?, cachePath: String, block: (Int, Int) -> Unit): Long {
        if (url.isNullOrEmpty()) return -1
        listeners[url] = block
        Aria.download(this).register()
        return Aria.download(this)
            .load(url) //读取下载地址
            .ignoreCheckPermissions()
            .setFilePath(cachePath) //设置文件保存的完整路径
            .create() //创建并启动下载
    }

    fun stop(taskId: Long) {
        Aria.download(this).load(taskId)?.stop()// 停止任务
    }

    fun resume(taskId: Long) {
        Aria.download(this).load(taskId)?.resume()// 恢复任务
    }

    fun cancel(taskId: Long) {
        //todo 取消任务失效,暂时先用删除所有任务进行替代,等定位到问题再进行还原
        Aria.download(this).removeAllTask(true)
//        val task = Aria.download(this).load(taskId)
//        task?.cancel(true)// 取消任务
    }

    //在这里处理任务执行中的状态，如进度进度条的刷新
    @Download.onTaskRunning
    fun running(task: DownloadTask) {
        val p = task.percent    //任务进度百分比
        var speed = task.convertSpeed    //转换单位后的下载速度，单位转换需要在配置文件中打开
        var speed1 = task.speed //原始byte长度速度
        listeners[task.key]?.invoke(DOWNLOAD_LOADING, p)
    }

    @Download.onTaskComplete
    fun taskComplete(task: DownloadTask) {
        //在这里处理任务完成的状态
        listeners.remove(task.key)?.invoke(DOWNLOAD_SUC, 100)
    }

    @Download.onTaskFail
    fun onTaskFail(task: DownloadTask) {
        listeners.remove(task.key)?.invoke(DOWNLOAD_FAIL, 0)
    }
}